<html>
  <head><title>LCM Calculator</title></head>
  <body>
  <font face="Courier New" size="3">
  <script type="text/javascript">

            t = b; b = a; a = t; // swap variables
        }
        while (b !== 0) {
            t = b;
            b = a % b;
            a = t;
        }
        // Only need to calculate gcd once, so "redefine" this method.
        // (Actually not redefinition - it's defined on the instance itself,
        // so that this.gcd refers to this "redefinition" instead of LCMCalculator.prototype.gcd.)
        // Also, 'gcd' == "gcd", this['gcd'] == this.gcd
        this['gcd'] = function() { return a; };
        return a;
    },
    "lcm" /* can use strings here */: function() {
        // Variable names don't collide with object properties, e.g. |lcm| is not |this.lcm|.
        // not using |this.a * this.b| to avoid FP precision issues 
        var lcm = this.a / this.gcd() * this.b; 
        // Only need to calculate lcm once, so "redefine" this method.
        this.lcm = function() { return lcm; };
        return lcm;
    },
    toString : function() {
        return "LCMCalculator: a = " + this.a + ", b = " + this.b;
    }
};
 
// Note: Array's map() and forEach() are predefined in JavaScript 1.6.
// They are currently not available in some major JavaScript engines 
// such as Internet Explorer, but are available under Firefox. 
// They are used here to demonstrate JavaScript's inherent functional nature.
 
[[25,55],[21,56],[22,58],[28,56]].map(function(pair) { // array literal + mapping function
    return new LCMCalculator(pair[0], pair[1]);
}).sort(function(a, b) { // sort with this comparative function
    return a.lcm() - b.lcm();
}).forEach(function(obj) {
    /* Note: print() is a JS builtin function available in Mozilla's js CLI;
     * It is functionally equivalent to Java's System.out.println().
     * Within a web browser, print() is a very different function 
     * (opens the "Print Page" dialog),
     * so use something like document.write() or alert() instead.
     */
    // print       (obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
    // alert       (obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
    document.write("hello, world!);
});
 
    </script>
    <noscript>
(Message from Wikipedia example) <br> 
Your browser either does not support JavaScript, or you have JavaScript turned off.
    </noscript>
  </body>
</html>

